/**
 * 筹码选择页面的逻辑
 */

// 封盘时，将所有投注按钮置灰
var fengpan = false;
function on_fengpan() {
    if (fengpan) return;
    fengpan = true;
    reset_counter();

    $(".fp-flag").show();
    $(".counter-confirm input").attr("disabled","disabled");
}

// 开盘了
function on_kaipan() {
    if (!fengpan) return;
    fengpan = false;
    $(".fp-flag").hide();
    $(".counter-confirm input").removeAttr("disabled");
}

// 当前是否允许下注
var _enableBet = true;
Classify.query("settings", "bet_enable", false, "1", function(v) {
    _enableBet = v == '1';
});

// 添加一个下注项
function add_bet_item(key, title, container) {
    // 取得赔率
    if (key.indexOf(":") > -1)
        key = key.split(":")[0];
    var rate = gameRule.map[key] ? gameRule.map[key].rate : "--";

    var div = $('<div class="bet-item"></div>');
    div.append('<div class="title">' + title + '</div>');
    div.append('<div class="rate">' + rate + '</div>');
    div.append('<div class="amount"><input type="number" /><div class="fp-flag">封盘</div></div>');
    div.append('<div class="clear" style="display:none"><label>' + key + '</label></div>');
    var td = $("<td></td>");
    td.append(div);
    container.append(td);
}

// 保证key不变
function add_bet_item2(key, title, container) {
    var k = key;
    if (key.indexOf(":") > -1)
        key = key.split(":")[0];
    var rate = gameRule.map[key] ? gameRule.map[key].rate : "--";

    var div = $('<div class="bet-item"></div>');
    div.append('<div class="title">' + title + '</div>');
    div.append('<div class="rate">' + rate + '</div>');
    div.append('<div class="amount"><input type="number" /><div class="fp-flag">封盘</div></div>');
    div.append('<div class="clear" style="display:none"><label>' + k + '</label></div>');
    var td = $("<td></td>");
    td.append(div);
    container.append(td);
}

// 刷新赔率信息
function refresh_bet_items() {
    var arr = $(".bet-item");
    for (var i = 0; i < arr.length; i++) {
        var e = $(arr[i]);
        var key = e.find("label").html();
        if (key.startsWith('一:')) key = '一';
        if (key.startsWith('二:')) key = '二';
        if (key.startsWith('三:')) key = '三';
        if (key.startsWith('四:')) key = '四';
        if (key.startsWith('五:')) key = '五';
        if (key.startsWith('六:')) key = '六';
        if (key.startsWith('七:')) key = '七';
        if (key.startsWith('八:')) key = '八';
        if (key.startsWith('正:')) key = '正';
        if (key.startsWith('任1:')) key = '任1';
        var rate = gameRule.map[key] ? gameRule.map[key].rate : "--";
        e.find(".rate").html(rate);
    }

    var arr = $(".special-rate");
    for (var i = 0; i < arr.length; i++) {
        var e = $(arr[i]);
        var key = e.attr("key");
        var rate = gameRule.map[key] ? gameRule.map[key].rate : "--";
        e.html(rate);
    }
}

// 扫描下所有的筹码录入框，并同步之
function scan_counter_confirm() {
    var arr = $(".counter-confirm");
    var template = '<div class="title">金额</div><input type="number"><button class="ok">确定</button><button class="reset">重置</button><div class="clear"></div>';
    for (var i = 0; i < arr.length; i++) {
        var e = $(arr[i]);
        e.empty();

        // 填入内容
        e.append(template);
    }

    // 关注输入变化的处理
    var onChanged = function(e) {
        var v = $(e.currentTarget).val().trim();
        get_selected_inputs().forEach(function(i) {
            i.val(v);
        });

        var list = $(".counter-confirm input");
        for (var i = 0; i < list.length; i++) {
            // 其他确定输入框也同步下
            if ($(list[i]).val() == v) continue;
            $(list[i]).val(v);
        }

        // 保存此数据
        try {
            if (localStorage) localStorage.setItem("com.cp-zy-counter", v);
        }
        catch(e) {
            console.error(e);
        }
    };

    // 读取保存的数据
    var curr = 100;
    try {
        if (localStorage) {
            var v = localStorage.getItem("com.cp-zy-counter");
            if (v) curr = parseInt(v);
        }
    }
    catch(e) {
        console.error(e);
    }

    arr = $(".counter-confirm input");
    for (var i = 0; i < arr.length; i++) {
        $(arr[i]).val(curr);
        $(arr[i]).on("input", onChanged);
    }

    // 确定按钮的处理
    var onOk = function(e) {
        if (!can_bet()) {
            alert2("已封盘，不能下注！", true);
            return;
        }

        // 取得自定义投注函数
        var p = $(e.currentTarget).parent().attr("ok");
        if (p && p != '') {
            (window[p])(parseInt($(".counter-confirm input").val()));
            return;
        }

        var data = get_counter_list();
        console.log(data);
        if (isEmpty(data)) {
            alert2("下注内容不正确，请重新下注！", true);
            return;
        }

        // 显示确认提示框
        show_bet_confirm_list(data);
    };
    arr = $(".counter-confirm .ok");
    for (var i = 0; i < arr.length; i++) {
        $(arr[i]).click(onOk);
    }

    // 充值按钮的处理
    var onReset = function(e) {
        reset_counter();

        // 取得自定义重置函数
        var p = $(e.currentTarget).parent().attr("reset");
        if (p && p != '') {
            (window[p])();
            return;
        }
    };
    arr = $(".counter-confirm .reset");
    for (var i = 0; i < arr.length; i++) {
        $(arr[i]).click(onReset);
    }

    // 确定下注的处理
    var hadclick = 0;
    $("#bet_clue .ok").click(function() {
        // 1s内只能处理1次，防止重复下注
        if (new Date().getTime() - hadclick < 1000) return;
        hadclick = new Date().getTime();
        do_bet();
    });
}

// 下注的流程
function do_bet() {
    // 关闭窗口
    $("#bet_clue").modal("close");

    if (!can_bet()) {
        reset_counter();
        alert2("已经封盘，下注失败。", true);
        return;
    }

    // 取得列表
    var data = get_confirm_list();

    // 由特定的游戏再解析一把
    if (window.unpack_bet_list)
        data = unpack_bet_list(data);
    console.log("下注", "第" + Lottery.curr() + "期", data);
    Lottery.ok(data, Lottery.curr(), "pc");
}

// 取得确认后的列表
function get_confirm_list() {
    var data = {};
    var trs = $("#bet_clue tbody tr");
    var inputs = $("#bet_clue tbody .c3 input");
    var checks = $("#bet_clue tbody .c4 input");
    for (var i = 0; i < checks.length; i++) {
        if (!checks[i].checked) continue;
        data[$(trs[i]).attr("value")] = parseInt($(inputs[i]).val()) * 100;
    }
    return data;
}

// 计算下注的注单数量和总额
function calc_bet_count() {
    var count = 0, total = 0;
    var inputs = $("#bet_clue tbody .c3 input");
    var checks = $("#bet_clue tbody .c4 input");
    if (window.calc_bet_list) {
        var arr = calc_bet_list(get_confirm_list());
        count = arr[0];
        total = arr[1];
    }
    else {
        // 走统一的流程
        count = 0;
        total = 0;
        for (var i = 0; i < checks.length; i++) {
            if (!checks[i].checked) continue;
            count++;
            var v = 100 * parseInt($(inputs[i]).val());
            total += v;
        }
    }
    return [count, total];
}

// 显示下注确认提示框
function show_bet_confirm_list(data) {
    // 填充内容
    var count = 0, total = 0;
    var table = $("#bet_clue tbody");
    table.empty();

    // 对数据做下加工(各游戏自行定义)
    if (window.parse_bet_list) {
        data = parse_bet_list(get_confirm_list());
    }

    for (var k in data) {
        // 取得赔率
        var key = k;
        if (key.indexOf(":") > -1)
            key = key.split(":")[0];
        var rate = gameRule.map[key] ? gameRule.map[key].rate : "--";

        // 取得显示的名称
        var name = gameRule.getTargetName(k);
        if (window.parse_target_name)
            name = parse_target_name(k);

        var tr = $("<tr value='" + k + "'></tr>");
        tr.append("<td class='c1'>" + name + "</td>");
        tr.append("<td class='c2'>" + rate + "</td>");
        tr.append("<td class='c3'><input type='number' value='" + parseInt(data[k]/100) + "'/></td>");
        tr.append('<td class="c4"><input type="checkbox" value="" data-am-ucheck checked></td>');
        table.append(tr);
    }

    // 计算组数与总额的回调处理
    var inputs = $("#bet_clue tbody .c3 input");
    var checks = $("#bet_clue tbody .c4 input");
    var cb = function() {
        var r = calc_bet_count();
        count = r[0];
        total = r[1];
        $($("#bet_clue .zushu .red")[0]).html(count);
        $($("#bet_clue .zushu .red")[1]).html(parseInt(total/100).toFixed(2));
    };

    // 关注输入框和check框的变化
    for (var i = 0; i < inputs.length; i++) {
        $(inputs[i]).on("input", cb);
    }
    for (var i = 0; i < checks.length; i++) {
        $(checks[i]).change(cb);
    }

    cb();
    $("#bet_clue").modal({
        width: 400
    });
}

// 扫描所有的下注项，并关注其选中
function scan_bet_items() {
    var onClick = function(e) {
        if (!_enableBet) {
            alert2("游戏暂时禁止下注！", true);
            return;
        }

        if (!can_bet()) return;

        var item = $(e.currentTarget);
        if (item.attr("class").indexOf("bet-active") != -1) {
            // 当前处于选中状态，反选之
            if ($(e.target).attr("type") == "number") return;
            item.attr("class", "bet-item");
            item.find("input").val("");
            return;
        }

        // 需要选中，并设置筹码的值
        item.attr("class", "bet-item bet-active");
        item.find("input").val($(".counter-confirm input").val().trim());
    };
    var arr = $(".bet-item");
    for (var i = 0; i < arr.length; i++) {
        var e = $(arr[i]);
        e.click(onClick);
    }
}

// 取得所有已选中的投注框
function get_selected_inputs() {
    var arr = $(".bet-active input");
    var list = [];
    for (var i = 0; i < arr.length; i++)
        list.push($(arr[i]));
    return list;
}

// 取得投注列表
function get_counter_list() {
    var data = {};
    var arr = $(".bet-active");
    for (var i = 0; i < arr.length; i++) {
        var amount = $(arr[i]).find("input").val().trim();
        if (amount == '') continue;
        amount = parseInt(amount);
        if (amount < 1) continue;

        // 最终以分为单位
        data[$(arr[i]).find("label").html()] = amount * 100;
    }
    return data;
}

// 重置所有数据
function reset_counter() {
    var arr = $(".bet-active");
    for (var i = 0; i < arr.length; i++) {
        var e = $(arr[i]);
        e.attr("class", "bet-item");
        e.find("input").val("");
    }
}
